<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>

    function Users(name,age) {
        this.name = name
        this.age = age

        //面向对象式写法，所有实例对象都会右 txt
        this.txt = function (){
            console.log('123');
        }
    }

    //往 原型链 上添加属性
    Users.prototype.txt2 = function(){
        console.log('123');
    }

        let aa = new Users('ming',18)
        
        console.log(aa);
    





    class User {
        constructor(name,age){
            this.name = name
            this.age = age

            // 同上，所有实例对象都有 txt
            this.txt = () => {
                // console.log('name',this.name)
                // console.log('123');
            }
        }


        //往 原型链 上添加
        txt2 () {
            console.log('123');
        }

        // 静态函数 User.add 本质上为 [纯函数]
        static add(){
            // this. 在静态函数内 不能使用 因为 其本质为纯函数
        }

        // 静态属性
        static VERSION = '1.0.0'
    }


    let ass = new User('ming',18)
    console.dir(User);
    // console.log('txt',ass.txt());
    console.log('txt2',ass.txt2());
    console.log(ass);


    // 使用 class 与原构造函数 区别：在往 圆形链 上添加时 class 不会分开写


    //-------------------------------

    // class 继承
    
    // 父类
    class Person{

    }

    //子类
        // extends 本质是 原型继承
    class Student extends Person{
        constructor(){  //实例属性

        }
        super()  // 代指的是 Person   这行代码的 本质 为 ：将 Person 中的 constructor 中的属性
                    // 绑定到 Student 的实例属性上 
                    //属于 借用 继承
    }



</script>